package com.richpay.basejava.base12;

public class Person {
    private String name = "Person";

    class Body {
        private String name = "Body";
       // private static int age;//错误，普通成员变量内部类不能有静态的声明，否则报如下错误：内部类不能有静态的声明。
        // 原因:静态的东西存在的周期比较早，类一加载就有了，而此时内部类还没有被实例化，那么不能为内部类的属性。
        class Heart {
            private String name = "Heart";

            class HeartRoom {
                private String name = "HeartRoom";

                public void display() {
                    String name = "display";
                    System.out.println("name=" + name);
                    System.out.println("this.name=" + this.name);
                    //内部类可以直接访问外部的私有成员变量和成员方法
                    System.out.println("Heart.this.name=" + Heart.this.name);
                    System.out.println("Body.this.name=" + Body.this.name);
                    System.out.println("Body.this.name=" + Person.this.name);
                    //内部类访问外部类的成员变量可以使用外部类名.this得到外部类对象，在.成员即可

                    Heart.this.display();

                }
            }

            public void show() {
                System.out.println("name=" + name);
                HeartRoom heartRoom = new HeartRoom();
                heartRoom.display();
            }

            public void display() {
                System.out.println("Heart.display()");
            }
        }

        public void show() {
            System.out.println("name=" + name);
            Heart heart = new Heart();
            heart.show();
        }
    }

    public void show() {
        System.out.println("name=" + name);
        Body body = new Body();
        body.show();

    }
}
